package com.eyealike.client;

import java.io.InputStream;

import com.eyealike.vsp.bindings.BatchIndexRequest;
import com.eyealike.vsp.bindings.BatchIndexResponse;
import com.eyealike.vsp.bindings.ClassificationRequest;
import com.eyealike.vsp.bindings.ClassificationResponse;
import com.eyealike.vsp.bindings.ComparisonResponse;
import com.eyealike.vsp.bindings.ImageCollection;
import com.eyealike.vsp.bindings.IndexRequest;
import com.eyealike.vsp.bindings.IndexResponse;
import com.eyealike.vsp.bindings.ProductSimilarityRequest;
import com.eyealike.vsp.bindings.ProductSimilarityResponse;
import com.eyealike.vsp.bindings.ProductSimilarityResult;
import com.eyealike.vsp.bindings.QueueStatusResponse;
import com.eyealike.vsp.bindings.SearchRequest;
import com.eyealike.vsp.bindings.SearchResponse;

public interface EyealikeAPI
{
	public ImageCollection createOrUpdateCollection( ImageCollection collection ) throws EyealikePlatformException;

	public boolean deleteCollection( String collectionId ) throws EyealikePlatformException;

	public IndexResponse indexRealTime( IndexRequest request ) throws EyealikePlatformException;

	public BatchIndexResponse indexBatch( BatchIndexRequest request ) throws EyealikePlatformException;

	public IndexResponse nextBatchIndexResult() throws EyealikePlatformException, EmptyResponseQueueException;

	public QueueStatusResponse batchIndexQueueStatus() throws EyealikePlatformException;

	public boolean unindex( String imageUrl ) throws EyealikePlatformException;

	public ProductSimilarityResponse queueProductSimilarityJob( ProductSimilarityRequest request )
		throws EyealikePlatformException;

	public ProductSimilarityResult nextProductSimilarityResult()
		throws EyealikePlatformException,
		EmptyResponseQueueException;

	public QueueStatusResponse productSimilarityQueueStatus() throws EyealikePlatformException;

	public ComparisonResponse compare( String roiA, String roiB, String profileCode ) throws EyealikePlatformException;

	public SearchResponse search( SearchRequest request ) throws EyealikePlatformException;

	public InputStream findCachedMedia( String id ) throws EyealikePlatformException;

	public boolean isCached( String id ) throws EyealikePlatformException;

	public ClassificationResponse classifyRealTime( ClassificationRequest request ) throws EyealikePlatformException;
}
